package com.wang.ioc.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewComponent {
	/**
	 * view的ID。
	 * @return
	 */
	public int id() default 0;
	/**
	 * view在布局文件中定义的ID属性值（字符串）。
	 * @return
	 */
    public String name() default "";
    /**
     * view类型的成员变量是否进行自动装配。
     * 默认自动装配。
     * @return
     */
    public boolean isAutowire() default true;
    /**
     * view是否可以触发OnClick事件。
     * 默认false。
     * @return
     */
    public boolean clickEventSource() default false;	
    /**
     * 默认文本内容。
     * @return
     */
    public String defaultTextValue() default "\\@";
    /**
     * 默认文本内容，使用资源id进行传值。
     * @return
     */
    public int defaultTextValueResId() default 0;
    /**
     * 默认是否可见。
     * @return
     */
    public VisibilityState defaultVisibility() default VisibilityState.KEEP;
    /**
     * 默认是否打开软键盘。对EditText控件有效。
     * 如果需要关闭，则要与parentViewId属性一起使用。
     * @return
     */
    public KeyboardState defaultKeyboardState() default KeyboardState.KEEP;
    /**
     * 控件的父级控件id。
     * 1、当布局中include多个View，实例化多个相同id的组件时进行区分。即 view=parentView.findViewById(id)
     * 2、与openKeyboard一起使用，如果需要关闭软键盘，则要设置此属性。
     * @return
     */
    public int parentViewId() default 0;
    /**
     * 设置默认的图像资源，应用于ImageView控件。
     * @return
     */
    public int imageResource() default 0;
    /**
     * 设置背景。
     * @return
     */
    public int backgroundResource() default 0;
    /**
     * 设置背景。
     * @return
     */
    public int backgroundColor() default -1;
    /**
     * 设置背景。
     * @return
     */
    public int backgroundColorResId() default 0;
    /**
     * 默认是否可见枚举值
     * @author wangchun
     *
     */
    public enum VisibilityState{
    	/**
    	 * 可见。
    	 */
    	VISIBLE,
    	/**
    	 * 不可见，且不占位。
    	 */
    	GONE,
    	/**
    	 * 不可见，且占位。
    	 */
    	INVISIBLE,
    	/**
    	 * 保持原有状态。
    	 */
    	KEEP
    }
    /**
     * 默认软键盘打开状态
     * @author wangchun
     *
     */
    public enum KeyboardState{
    	/**
    	 * 默认开启。
    	 */
    	OPEN,
    	/**
    	 * 默认关闭。
    	 */
    	CLOSE,
    	/**
    	 * 保持原有状态。
    	 */
    	KEEP
    }
}
